package com.cskaoyan.interfaces;

/*
        接口的语法
            接口用关键字interface表示
            格式：interface 接口名 {}
        接口的理解，从数据类型的角度理解:

         类和接口都可以用来表示数据类型(类和接口是地位对等的)，只不过他们的侧重点不一样
             主要从 操作（行为）描述：
          b. 类定义的是一个数据集合基于这个数据集的 一组操作(行为)，
             类所描述的这一组行为，它们是有关系的（间接），都可以访问同一个数据集合

          c. 接口表示数据类型，侧重于描述，一组具有特殊 功能 的行为，这些行为，
             可以完全没有任何关系。接口中的方法，它们的关系比较的松散

         类与类之间可以有继承关系，类和接口之间可以有实现关系(实现关系实质上就是继承关系)
         类名 implements 接口名

         接口的特征:
         1. 接口的实例化特征
            a. 接口不能直接实例化(只能定义抽象方法)
            b. 接口可以间接实例化
               接口类型  引用变量名 = new 接口子类对象

         2. 接口子类:
            a. 抽象类
            b. 普通类
 */
public class Demo2Basic {

    public static void main(String[] args) {
        // 接口不能直接实例化
        //TestInterface testInterface = new TestInterface();

        // 接口可以间接实例化
        TestInterface father = new TestClass();
        // 多态
        father.firstMethod();
    }
}

// 接口定义
interface TestInterface {
    // 定义抽象方法
    public abstract void firstMethod();
}
// 普通子类
class  TestClass implements TestInterface {

    public void firstMethod() {
        System.out.println("first method");
    }
}

// 接口的抽象子类
abstract class AbstractClass implements TestInterface {

}
